#include <iostream>
#include <stdio.h>
#include <queue>
using namespace std;
int M[507][507];
int R[507][507];
int n;
int dir_x[]={0,1};
int dir_y[]={1,0};
struct node {
    int x, y;
};
void BFS() {
    node pre, nex;
    int x,y;
    pre.x=0; pre.y=0;
    queue<node> q;
    q.push(pre);
    while (!q.empty()) {
        pre=q.front(); q.pop();
        for (int i=0; i<2; ++i) {
            x=pre.x+dir_x[i]; y=pre.y+dir_y[i];
            if (x>=n || y>=n) continue;
            if (R[x][y]<R[pre.x][pre.y]+M[x][y]) {
                R[x][y]=R[pre.x][pre.y]+M[x][y];
                nex.x=x; nex.y=y;
                q.push(nex);
            }
        }
    }
}
int main() {
    scanf("%d", &n);
    for (int i=0; i<n; ++i) {
        for (int j=0; j<n; ++j) {
            scanf("%d", &M[i][j]);
        }
    }
    R[0][0]=M[0][0];
    BFS();
    printf("%d\n", R[n-1][n-1]);
    return 0;
}
